package cn.stacey.blog.service;

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.stacey.blog.domain.Category;
import cn.stacey.blog.mapper.CategoryMapper;
//import cn.stacey.blog.utils.ServiceProxyUtils;
//import cn.stacey.blog.utils.SessionFactoryUtils;

@Service
@Transactional   //相当于在当前类的每个方法上加了切面，方法执行之前，会开启事务，方法执行之后会关闭事务
public class CategoryService {
	@Autowired
	CategoryMapper mapper;

	
	public List<Category> findAll() {
//		SqlSession session=null;
//		SqlSessionFactory factory = SessionFactoryUtils.getFactory();
//			session = factory.openSession();
			//mapper = session.getMapper(CategoryMapper.class);
		//用了代理对象可以删掉上面几句话，因为CategoryServlet中调用了本方法，
				//而在CategoryService中引用了ServiceProxyUtils类中的代理对象	
				List<Category> data = mapper.findAll();
				//session.close();
				//service返回一个从mapper->数据库查到的数据
				return data;		

	}
	
	public void insertCategory(Category category) {
//		SqlSession session=null;
//		SqlSessionFactory factory = SessionFactoryUtils.getFactory();
//		session = factory.openSession();
//
//			mapper = session.getMapper(CategoryMapper.class);
		//用了代理对象可以删掉上面几句话，因为CategoryServlet中调用了本方法，
		//而在CategoryService中引用了ServiceProxyUtils类中的代理对象
			
//				List<Category> data = mapper.findAll();
			//下面的insert 是和   数据库  联系的方法
			
			mapper.insert(category);
			
//			session.commit();
//			session.close();

	}
	
	
public void updateCategory(Category category) {
//	SqlSession session=null;
//	
//	SqlSessionFactory factory = SessionFactoryUtils.getFactory();
//		session = factory.openSession();
//		mapper = session.getMapper(CategoryMapper.class);
		
	//用了代理对象可以删掉上面几句话，因为CategoryServlet中调用了本方法，
			//而在CategoryService中引用了ServiceProxyUtils类中的代理对象
	
//			List<Category> data = mapper.findAll();
		//下面的insert 是和   数据库  联系的方法
		
		mapper.update(category);	
//		session.commit();
//		session.close();
		
}
	


public void deleteCategory(int id) throws SQLException{
	//SqlSession session=null;
//	SqlSessionFactory factory = SessionFactoryUtils.getFactory();
//		session = factory.openSession();
//		mapper = session.getMapper(CategoryMapper.class);
		
		mapper.delete(id);
		
//		session.commit();
//
//		session.close();
	}
//测试动态代理
public void foo() {
	
}

public void findById(int id1,int id2) {
	Category c1 = mapper.findById(id1);
	Category c2 = mapper.findById(id2);
	c1.setName("事务1");
	c2.setName("事务2");
	mapper.update(c1);
	if(true) {
		throw new RuntimeException("执行完事务1，还没执行事务2时手动报一个错误");
	}
	mapper.update(c2);
}
}
